#ifndef _TD_FLOWER_TOWER_H_
#define _TD_FLOWER_TOWER_H_

/************************************************************************/
/* Game                                                                 */
/************************************************************************/
#include "Game/Game Objects/Towers/BaseTower.h"
#include "Game/Factories/ShotFactory.h"

using namespace std;
using namespace TD_Core;

namespace TD_Game {

	class FlowerTower : public BaseTower {

		/************************************************************************/
		/* Flower tower definitions                                             */
		/************************************************************************/
		static const int shootingInterval[NUMBER_OF_LEVELS];
		static const unsigned int towerRadius[NUMBER_OF_LEVELS];
		static const unsigned int towerDamage[NUMBER_OF_LEVELS];
		static const unsigned int towerPrice[NUMBER_OF_LEVELS];
		static const unsigned int towerValue[NUMBER_OF_LEVELS];
		static const string towerName;


	protected:
		
		static const FlowerTower * m_pStaticReference;
		static shared_ptr<SDLSound> m_pHittedSound;
		static shared_ptr<SDLSound> m_pLaunchSound;

		

		/************************************************************************/
		/* Protected functions                                                  */
		/************************************************************************/
		void initBaseValues();
	
	public:

		/************************************************************************/
		/* ctors and dtors					                                    */
		/************************************************************************/
		//Default constructor
		explicit FlowerTower();

		//Copy constructor
		explicit FlowerTower(const FlowerTower &rhs);

		//Assignment constructor
		FlowerTower& operator=(const FlowerTower &rhs);

		//Initialization constructor
		FlowerTower(unsigned int g_ID, const Coord2D & turretPosition);

		//Destructor
		~FlowerTower();
		
		/************************************************************************/
		/* Access functions                                                     */
		/************************************************************************/
		static const FlowerTower * getStaticReference(); 

	};
}

#endif